Skip to content

Jeongmin Kang#25

Open
s13121312 wants to merge 2 commits intomainfrom
JeongminKang
Open

Jeongmin Kang#25
s13121312 wants to merge 2 commits intomainfrom
JeongminKang

Conversation

@s13121312
Copy link
Member

@s13121312 s13121312 commented Jul 5, 2025

1. 14502

🔗 문제 링크

https://www.acmicpc.net/problem/14502

✔️ 소요된 시간

50m

✨ 수도 코드

  1. 벽 3개 세우기
  2. bfs 돌며 최대값 갱신

벽 3개 세우는 걸 코드로 어떻게 옮길까 생각을 하던 중에 전에 idx를 사용해서 x,y좌표를 구하는 방식이 떠올라 사용했슴다!
dfs를 통해서 벽3개를 만들어준 상태에서 depth가 3이 됬을때 그 안에서 bfs를 돌아서 정답을 갱신하면 되요

if(arr[x][y] == 0) {
        builtwall.push_back({x, y});
        buildwall(idx+1, depth+1);
        builtwall.pop_back();
    } 
    //// 안 세우고 넘어가는 경우
    buildwall(idx+1, depth);

처음에 else로 buildwall(idx+1, depth);
이 부분을 빼서 실패했었는데 왜 실패 했냐면 else로 빼서 처리하게 되면은
안 세우고 넘어가는 경우는 처리를 안하고 벽 세우는 경우만 탐색을 하게 됨

아래 부분은 디버깅용 배열을 확인하는 용도에요

int tm =bfs(tmp);
        if(ans < tm) {

            ans = tm;
            for(int i=0;i<n;i++) {
                for(int j=0;j<m;j++) {
                    ansarr[i][j] = tmp[i][j];
                }
            }
        }

📚 새롭게 알게된 내용

2. 2206

🔗 문제 링크

https://www.acmicpc.net/problem/2206

✔️ 소요된 시간

정답 참고(30분 고민)

✨ 수도 코드

벽을 부순 경우, 안 부순 경우를 다 생각하는걸 코드로 어떻게 변환할까 생각하다가 안 떠올라서 바로 정답을 참고 했습니다.
int dist[1005][1005][2];
[0] 벽을 하나도 안 부수고 (x,y)까지 오는데 걸리는 비용
[1] 벽을 하나만 부수고 (x,y)까지 오는데 걸리는 비용, (x,y)가 벽이라서 부수는 경우 포함

bfs틀은 비슷해서 주석 달아놓은것으로 이해되실거같습니다!

             if(arr[nx][ny] == '0' && dist[nx][ny][broken] == -1) { //온적 없고 벽이아니면
                dist[nx][ny][broken] = nxtdist;
                q.push({nx,ny,broken});
            }
            if(!broken && arr[nx][ny] == '1' && dist[nx][ny][broken] == -1) { // broken이 0(벽을 한 번도 한 부숨) 다음에 갈게 벽이고 간 적 없으면
                dist[nx][ny][1] = nxtdist;
                q.push({nx, ny, 1});
            }

            /*아래와 같이하면 broken을 따로 체크안해주니까 여러번 부술 수 있음 */
            // if(arr[nx][ny] == '1' && dist[nx][ny][broken] == -1) { //다음에 갈게 벽이고 간 적없으면
            //     dist[nx][ny][1] = nxtdist;
            //     q.push({nx, ny, 1});
            // }

📚 새롭게 알게된 내용

상태를 3차원 배열에 추가로 넣는 방식의 문제를 어떻게 처리할지 새로 알았어요

        int x, y, broken;
        tie(x,y,broken) = q.front();

tie로 변수를 받을 수 있어요

<참고>
https://github.com/encrypted-def/basic-algo-lecture/blob/master/0x09/solutions/2206.cpp

@s13121312 s13121312 added the 🥳 리뷰 해주세요 Improvements or additions to documentation label Jul 5, 2025
@s13121312 s13121312 self-assigned this Jul 5, 2025
@snughnu
Copy link
Contributor

snughnu commented Jul 8, 2025

연구소 옛날에 시도했었는데, 저는 구현이 너무 어렵더라구요
벽에서는 3차원 배열쓰니깐 깔끔하게 표현되네요, 저는 2차원 배열 쓰는 것도 가끔 헷갈리던데

@s13121312
Copy link
Member Author

연구소 옛날에 시도했었는데, 저는 구현이 너무 어렵더라구요 벽에서는 3차원 배열쓰니깐 깔끔하게 표현되네요, 저는 2차원 배열 쓰는 것도 가끔 헷갈리던데

저도 옛날에 시도했다가 못 푼 기억땜에 다시 도전했는데 이번엔 성공했네요.
큰 틀로 먼저 생각하고 벽 3개 세우기(dfs로 벽고르기) -> bfs 돌며 최대값 갱신
그걸 어떤 방식으로 풀어내야할지 생각을 좀 많이 하면 좋을거같아요
dfs, bfs 문제를 꾸준히 풀어야 구현 문제(시뮬레이션)는 익숙해지는거같아요!

@ioo5959
Copy link
Contributor

ioo5959 commented Jul 10, 2025

어려워유ㅠ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🥳 리뷰 해주세요 Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants